package com.itheima.my_reggie.web;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.my_reggie.common.Result;
import com.itheima.my_reggie.pojo.Employee;
import com.itheima.my_reggie.service.IEmployeeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {
    @Autowired
    IEmployeeService employeeService;

    @PostMapping("/login")
    public Result<Employee> checkLogin(HttpSession session,@RequestBody Employee employee){
        log.info("登录功能启动");
//      将前台提交的密码进行md5的加密处理
        String pwd= DigestUtils.md5DigestAsHex(employee.getPassword().getBytes());
//      根据客户提交的用户名进行查询数据库信息
        LambdaQueryWrapper<Employee> wrapper= new LambdaQueryWrapper<>();
        wrapper.eq(Employee::getUsername,employee.getUsername());
        Employee queryEmp = employeeService.getOne(wrapper);
//      判断数据库中是否查询到该用户名
        if(queryEmp==null){
            return Result.error("该用户不存在");
        }
//      判断当前输入的密码是否正确
        if(!queryEmp.getPassword().equals(pwd)){
            return Result.error("密码错误");
        }
//      判断当前登录用户的状态是否为禁用
        if(queryEmp.getStatus()==0){
            return Result.error("此用户被禁用");
        }
//      存储session信息，用于记录用户的id
        session.setAttribute("emp",queryEmp.getId());
//      返回登录的结果
        return Result.success(queryEmp);
    }

//  添加员工的方法
    @PostMapping
    public Result<String> save(@RequestBody Employee employee){
//      设置添加的员工的密码.并用MD5进行加密
        employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));
//      接收session中的id数据
//        Long empId = (Long) session.getAttribute("emp");
//      统一的设置数据库中非空的字段
//        employee.setCreateTime(LocalDateTime.now());
//        employee.setUpdateTime(LocalDateTime.now());
//        employee.setCreateUser(empId);
//        employee.setUpdateUser(empId);
//      调用添加的方法
        employeeService.save(employee);
        return Result.success("新员工添加成功");
    }
//  查询员工的数据
    @GetMapping("/page")
    public Result<Page> pageEmp(Integer page,Integer pageSize,String name){
        Page<Employee> pageConfig = new Page<>(page,pageSize);
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(name!=null&&name!="",Employee::getName,name);
        employeeService.page(pageConfig,wrapper);
        return Result.success(pageConfig);
    }
//修改员工的状态值
    @PutMapping
    public Result changeStatus(@RequestBody Employee employee){
//      从session中获取id的值
//        Long empId = (Long) session.getAttribute("emp");
//      设置更新和修改人的id
//        employee.setCreateUser(empId);
//        employee.setUpdateUser(empId);
//      调用更新的方法
        employeeService.updateById(employee);
        return Result.success(null);
    }
//  查询一个数据的功能
    @GetMapping("/{id}")
    public Result queryOneEmp(@PathVariable Long id){
//      根据id信息调用查询方法
        Employee emp = employeeService.getById(id);
//      判断查询的对象是否为空
        if(emp==null){
            return Result.error("未查询到对应的员工信息");
        }
        return Result.success(emp);
    }

//  退出功能
    @PostMapping("/logout")
    public Result<String> LogOut(HttpServletRequest request){
//      重置session中的数据
        request.getSession().removeAttribute("emp");
//      提示退出成功
        return Result.success("退出成功");
    }
}
